explicit programming 의 한계와 인공지능의 대두
흔히 말하는 explicit programming 이란 사람이 생각한 다양한 방법들을 단순히 프로그램으로 옮기는 작업이다.
예를 들어 주식 시장의 주식을 판매를 할것인가의 하는 문제를 프로그램 적으로 해결을 할 때에, 국가의 GDP가 높아지면 주식의 판매하는 것이 바람직하다는 가정을 토대로 프로그램을 만들 수 있다. 이러한 판단이 옳을 수도 있지만 주식시장이라는 거대한 복합체를 판단하기에는 너무나 많은 다양한 변수들이 존재하기 때문에 이것을 프로그램화 시키는 것은 불가능한 수준에 가까웠다.
즉, 흔한 일상 생활에도 상당히 복잡한 상황들이 많이 발생하고 이것을 논리를 기반으로 한 프로그램으로 만들기 어려운 문제가 발생하게 되었고, 과학자들은 사람들이 정보를 학습할때 입력과 결과의 합, 즉 경험을 통해 학습을 진행하는 것을 모티브로 컴퓨터돠 수많은 입력과 출력의 쌍으로 어떤 상황에 대한 판단능력을 기를 수 있고, 또 보다 지능적인 프로그램을 만들 수 있지 않을 까 하는 생각을 하게 되었고, 그것이 인공 지능의 시초이다.
인공지능을 위해서는 다양한 입력과 결과를 토대로 학습을 진행하여야 하는데, 데이터의 종류를 알고 학습을 하는가 혹은 모르고 학습을 하는가에 따라 supervised learning 과 unsupervised learning으로 나누어 지게 된다.
supervised learning
데이터가 무엇인지 가르쳐 주고 학습을 진행한다. 즉 labeled data를 가지고 학습을 하는 학습방법이며 결과값의 범위에 따라 다음과 같은 종류가 있다.
regression
예를들어 시험 성적의 값을 알고 싶은 경우 예를 들어 범위가 매우 넓은 경우binary classification
결과가 둘중 하나인 경우
- multi-label classification
결과가 몇가지 케이스가 있는 경우
unsupervised learning
un-labeled data를 가지고 학습한다.
그룹핑이나 클러스터링을 주로 한다.
tensorflow 설치
1 | pip install upgrade tensorflow |
예제1
2
3
4
5
6
7
8
9
10
11
12import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
//여기서 constant는 하나의 노드, 오퍼레이션을 의미한다
//예를 들어 print(hello)를 출력하면 이상한 값이 나온다.
sess = tf.Session()
print sess.run(hello) //실행을 시키는 부분이다.
placeholder1
2
3
4
5
6
7
8
9
10//a와 b의 자료형을 지정해 주어 뒤에서 사용할 수 있게 한다.
a = tf.placeholder(tf.int16)
b = tf.placeholder(tf.int16)
add = tf.add(a,b)
mul = tf.mul(a,b)
with tf.Session() ass sess:
print "Addition with variables: %i" % sess.run(add, feed_dict={a: 2, b:3}) //a와 b에 값을 넘겨줄 수 있다.
print "Multiplication with variables: %i" % sess.run(mul, feed_dict={a: 2, b:3}) //a와 b에 값을 넘겨줄 수 있다.
data flow graph
edge와 node 로 구성된 data flow graph는 다음과 같은 의미를 가진다.
node는 수학적 계산을 하는 operation의 의미를 가지며 edge는 데이터가 흘러들어감을 보여주는 연결선이다.
이러한 데이터는 data array와 같은 형태를 가지는데 이를 다른 말로는 tensor 라는 말로도 부른다.
tensorflow란 말은 이러한 데이터의 흐름을 의미한다.
이러한 node들은 꼭 동일한 cpu 혹은 gpu안에 존재하지 않아도 되고 분산되어 존재하면서 병렬연산이 가능하기에 매우 강력하다.
많은 컴퓨터들을 컴퓨터 자원을 통합해서 계산이 가능해진 것이다
Comments